home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Graphics Plus
/
Graphics Plus.iso
/
msdos
/
viewers
/
showgl19
/
hpgl.h
< prev
next >
Wrap
C/C++ Source or Header
|
1992-08-18
|
10KB
|
275 lines
/* program for reading HPGL files and plotting to the screen */
/* copyright 1991 - 1992, Robert C. Becker, Lantern Systems */
/* HPGL, HPGL/2, HP, DraftPro are trademarks of the Hewlett-Packard company */
#ifdef DEBUG
#define DB(x) x /* debugging tool */
#else
#define DB(x)
#endif
#define MIN(x,y) ((x) < (y) ? (x) : (y))
#define MAX(x,y) ((x) < (y) ? (y) : (x))
#define SCALEMAX 32767.0 /* initial max scaling value */
#define SCALEMIN -32768.0 /* initial min scaling value */
#define RAD_2_DEG 57.2957795 /* degree's per radian */
#define LABEL_BFR 512 /* size of labeling buffer */
#define LORG_DEFAULT 1 /* default label origin */
#define PA 0
#define PR 1
#define PENUP 0
#define PENDOWN 1 /* p_status values */
#define ESC 0x1B /* start of RS-232 command */
#define ETX 0x03 /* end of transmission */
#define TERMCHAR ';' /* command termination char */
#define DEF_CHORD 5.0 /* default chord angle for AA, AR, CI */
#define MAX_CHORD 180.0 /* maximum chord angle */
#define MIN_CHORD 0.5 /* minimum chord angle */
#define DEF_TICK 0.5 /* default tick length */
#define PG_DELAY 6 /* 6 second delay to gclear () on PGn; instr */
#define SOLID 0 /* solid fill, bidirectional */
#define SOLID1 1 /* solid fill, unidirectional */
#define HATCH 2 /* hatched fill */
#define XHATCH 3 /* cross-hatched fill */
#define SHADED 4 /* shaded fill */
#define USERFILL 5 /* user defined fill */
#define DEFAULT_FILL SOLID /* default fill type () */
#define MAX_COLORS 16 /* maximum number of colors for pen mapping */
#define ON 1 /* "on" constant */
#define OFF 0 /* "off" constant */
#define ANG 1 /* angle-type chord lengths */
#define LENGTH 0 /* length-type chord lengths */
#define CP_XSCALE 1.60 /* CP scale factor to add-in inter-character spacing */
#define CP_YSCALE 1.60 /* CP scale factor to add in inter-line spacing */
#define DEFAULTUNITS 0 /* hatch & x-hatch fill using default spacings */
#define PLOTTERUNITS 1 /* hatch & x-hatch fill using plotter units (frozen) */
#define USERUNITS 2 /* hatch & x-hatch fill using user units (variable) */
#define ANISOTROPIC 0 /* anisotropic scaling */
#define ISOTROPIC 1 /* isotropic scaling */
#define ABSOLUTE 0 /* absolute coordinates */
#define RELATIVE 1 /* relative coordinates */
#define FILLED_ABS 0x10 /* absolute coordinates, filled */
#define FILLED_REL 0x11 /* relative coordinates, filled */
#define A4_paper 0 /* paper-size index values */
#define A3_paper 1 /* these correspond to values assigned to option flags */
#define A2_paper 2 /* used in getargs.c for paper sizes and to the order of */
#define A1_paper 3 /* elements in the struct paper_size in hpgl.c */
#define A0_paper 4
#define A_paper 5
#define B_paper 6
#define C_paper 7
#define D_paper 8
#define E_paper 9
#define DRAFTPRO 1 /* HP DraftPro plotter */
#define F_70 2 /* HP 7470 Emulation flag */
#define F_75 3 /* HP 7475 Emulation flag */
#define Debug_flag 1 /* debugging output activation flag */
#define plot_abs(x) plot_line (x, ABSOLUTE) /* absolute plotting */
#define plot_rel(x) plot_line (x, RELATIVE) /* relative plotting */
#define set_acsize(x) set_csize (x, ABSOLUTE) /* absolute csize */
#define set_rcsize(x) set_csize (x, RELATIVE) /* relative csize */
#define label_adir(i) label_dir (i, ABSOLUTE) /* absolute label direction */
#define label_rdir(i) label_dir (i, RELATIVE) /* relative label direction */
#define print_string(x) print_error (x, 1) /* print string to stdout */
#define print_noinstr(x) print_error (x, 0) /* instruction not implimented */
#define edge_rect_abs(x) draw_rect (x, ABSOLUTE) /* edge rectangle absolute */
#define edge_rect_rel(x) draw_rect (x, RELATIVE) /* edge rectangle relative */
#define filled_rect_abs(x) draw_rect (x, FILLED_ABS) /* filled rectangle absolute */
#define filled_rect_rel(x) draw_rect (x, FILLED_REL) /* filled rectancle relative */
#define arc_3pt_abs(x) arc_3pt (x, ABSOLUTE) /* 3-point arc, absolute */
#define arc_3pt_rel(x) arc_3pt (x, RELATIVE) /* 3-point arc, relative */
#define input_p1p2abs(x) input_p1p2 (x, ABSOLUTE) /* IP instruction */
#define input_p1p2rel(x) input_p1p2 (x, RELATIVE) /* IR instruction */
#define abs_arc(x) draw_arc (x, ABSOLUTE) /* absolute arc */
#define rel_arc(x) draw_arc (x, RELATIVE) /* relative arc */
#define set_window(x1,x2,y1,y2) set_scale (x1, x2, y1, y2) /* anisotropic scaling function */
struct options /* structure for command line arguments */
{
int paper; /* type of paper used */
int video; /* video adapter: CGA, EGA, VGA, or auto select */
int plotter; /* plotter type: normal (origin in lower-left corner) or draft pro (origin at center) */
int debug; /* debugging output flag */
FILE *infile; /* file handle for input source */
};
struct cplot
{
double x, y, ldir, dvdir; /* (x,y) position, label direction, DV label direction (degrees) */
int dv; /* label stacking direction code */
int lorg; /* label origin code */
}; /* (x,y) for location of last start of line or last position moved to by
PA, PR, PU, PD instruction */
struct csizes
{
double csize_x, csize_y, slant, acsize_x, acsize_y,
rcsize_x, rcsize_y, csize_basis;
int cscale_mode;
};
/* csize_x, csize_y: character sizes in GDU's units
slant: character slant (tan (slant_angle) )
rcsize_x, rcsize_y: relative csize storage
acsize_x, acsize_y: absolute csize storage
csize_basis: relative char size for screen plot (relative to A-size paper)
cscale_mode: 0 for absolute sizes, 1 for relative sizes
*/
struct paper_size
{
double ipxmin, ipymin, ipxmax, ipymax,
psxdef, psydef, ipxsize, ipysize;
double ip1x, ip1y, ip2x, ip2y;
double csize_basis;
};
/* ipxmax, ipymax: maximum values for IP coordinates
psxdef, psydef: default values for PS (plot size)
ipxsize, ipysize: size of page in IP units (1000th's of an inch)
ip1x, ip1y: initial lower left corner IP coordinates
ip2x, ip2y: initial upper right corner IP coordinates
csize_basis: char size basis scaling (relative to diagonal
distance across A-size paper):
basis = A-size diagonal / this-size diagonal.
*/
struct win_corners
{
double x1, y1, x2, y2;
};
/* user unit window corners: (x1, y1) = lower right; (x2, y2) = upper left */
struct clip_border
{
int xmin, xmax, ymin, ymax;
};
/* clip border in pixel units */
#ifndef NO_VIDEO /* do not define this block when NO_VIDEO is defined */
#ifndef ADAPTER_CODES
#define NOGRAPHICS 0 /* no supported graphics modes available */
#define CGA 1 /* CGA */
#define CGAM 2 /* CGA Monochrome */
#define MEGA 0x83 /* EGA monochrome */
#define CEGA 4 /* EGA color */
#define PGC 5 /* PGC: not supported */
#define MVGA 0x86 /* VGA monochrome */
#define CVGA 7 /* VGA color */
#define EMCGA 8 /* MCGA w/EGA color display */
#define MMCGA 0x89 /* Mono MCGA */
#define CMCGA 0x0A /* Color MCGA */
#define ATT 0x0B /* ATT PC6300: no DEB present */
#define ATT_DEB 0x0C /* ATT PC6300: with DEB present */
#define HGC 0x8D /* Hercules graphics card */
#define HGCPLUS 0x8E /* Hercules Plus card */
#define INCOLOR 0x0F /* Hercules InColor card */
#define Num_Adapters 16 /* total # of adapters in this list */
struct video_type__
{
unsigned type;
struct _vid_x_parm_ *vid_mode;
char *display;
};
#define ADAPTER_CODES
#endif
#ifndef VID_RTN_DEFT
struct video_display /* returned structure for video_test () */
{
unsigned disp_a;
struct _vid_x_parm_ *vid_mode_a;
char *display_a;
unsigned disp_b;
struct _vid_x_parm_ *vid_mode_b;
char *display_b;
};
#define VID_RTN_DEFT /* video_test return structure defined */
#endif
struct video_display *video_test ( void );
#endif
struct options *getargs ( int, char ** );
void arc_3pt ( FILE *, int );
void begin_plot ( FILE * );
void calc_ticksize ( double, double );
void char_plot ( FILE * );
void calc_csize ( double, double, int );
void chord_t ( FILE * );
void circle ( FILE * );
void define_path ( FILE * );
void draw_arc ( FILE *, int );
void draw_rect ( FILE *, int );
void draw_wedge ( FILE * );
void draw_xtick ( void );
void draw_ytick ( void );
void extra_space ( double, double );
void fill_type ( FILE *, int );
void fix_hatch ();
void get_anchor ( double *, double * );
int get_val ( FILE *, double * );
int get_xy ( FILE *, double *, double * );
void init_fills ( void );
void initialize ( FILE * );
void label_dir ( FILE *, int );
void label_graph ( FILE * );
void label_origin ( FILE * );
void label_term ( FILE * );
void line_pattern ( FILE * );
void new_plot ( void );
void page_adv ( FILE * );
int plotted_on ( int );
void plotter_units ( double *, double * );
void print_error ( char *, int );
void recalc_csize ( void );
void recalc_ticksize ( void );
void set_anchor ( double, double, int );
void set_clip (double, double, double, double );
void set_csize ( FILE *, int );
void set_scale ( double, double, double, double );
void set_slant ( FILE * );
void symbol_mark ( unsigned char );
void tick_length ( FILE * );
void twait ( FILE *, int );
void user_units (double *, double *);
void velocity_sel ( FILE * );
void xparent_data ( FILE * );
/* media ranges (maximum plotting range) */
/* paper size Xmax Ymax size */
/* ANSI A 10365 7962 8.5 x 11 in. */
/* ANSI B 16640 10365 11 x 17 in. */
/* ISO A4 11040 7721 210 x 297 mm */
/* ISO A3 16153 11040 297 x 420 mm */